//
// Created by fh on 2021/6/1.
//

#ifndef CDEMO_SQSTACK_H
#define CDEMO_SQSTACK_H

#include <stdio.h>
#include <stdlib.h>
#include "CustomDefine.h"

#define MAXSIZE 20

/* 顺序栈 */
typedef struct {
    int data[MAXSIZE];
    int top; /* 用于栈顶指针 */
} SqStack;

/* 插入元素e为新的栈顶元素 */
Status SqStackPush(SqStack *s,int e);
/* 若栈不空，则删除s的栈顶元素，用e返回其值，并返回OK，否则返回ERROR */
Status SqStackPop(SqStack *s,int *e);
/* 遍历顺序栈 */
Status SqStackDisplay(SqStack s);
/* 测试demo */
void sqStackTestDemo();

/* 两栈共享空间：栈1的栈底是数组0，栈2的栈底是数组最后一个元素，即栈1和栈2的两个栈顶相连的 */
typedef struct {
    int data[MAXSIZE];
    int top1; /* 栈1栈顶指针 */
    int top2; /* 栈2栈顶指针 */
} SqDoubleStack;

/* 插入元素e为新的栈顶元素，stackNumber用来判断是栈1还是栈2 */
Status SqDoubleStackPush(SqDoubleStack *s,int e,int stackNumber);
/* 若栈不空，则删除s的栈顶元素，用e返回其值，并返回OK，否则返回ERROR */
Status SqDoubleStackPop(SqDoubleStack *s,int *e,int stackNumber);
/* 遍历共享顺序栈 */
Status SqDoubleStackDisplay(SqDoubleStack s);
/* 测试demo */
void sqDoubleStackTestDemo();

#endif //CDEMO_SQSTACK_H
